package com.example.administrator.testxingpiao.utils;

import android.text.TextUtils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 类描述:
 * 创建人:一一哥
 * 创建时间:16/7/4 22:39
 * 备注:
 */
public class PinYinUtil {

    //获取汉字对应的拼音
    public static String getPinYin(String hanzi) {
        String pinyin = "";

        //当汉字为空的情况下,直接返回"".
        if (TextUtils.isEmpty(hanzi)) {
            return pinyin;
        }

        //设置汉语拼音的输出转换格式
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        //将汉语拼音设置为大写格式
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        //设置汉语拼音的声调格式.此处不带声调(音标)
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        //将汉字进行拆分
        char[] chars = hanzi.toCharArray();
        //遍历数组
        for (char aChar : chars) {
            //如果名称中包含空格,则将空格忽略.比如:张  三
            if (Character.isWhitespace(aChar)) {
                continue;
            }

            if (aChar > 127) {
                //如果是汉字.因为每个汉字占2个字节,所以汉字的长度肯定大于127位.
                //故此处根据字节长度简单判断是否是汉字.
                try {
                    //此处返回的是拼音数组,是因为一个汉字可能是多音字,存在多个拼音.
                    String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(aChar, format);
                    if (pinyins == null) {
                        //全角字符的字节数也会大于127.所以此处的数组长度可能为0.所以需要进一步判断.
                        pinyin += aChar;
                    } else {
                        //即使有多音字,也只能取数组的第一个
                        pinyin += pinyins[0];
                    }
                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                    badHanyuPinyinOutputFormatCombination.printStackTrace();
                    //有可能不是汉语拼音.比如:张#a.&三
                    pinyin += aChar;
                }
            } else {
                //半角字符字节数小于127.
                //如果不是汉字,则直接拼接字符串.比如:张a三
                pinyin += aChar;
            }
        }
        return pinyin;
    }
}
